package com.shrct.businessprocess.project;

import com.shrct.businessprocess.budget.RCCostBreakDown;
import com.shrct.businessprocess.budget.RCSaleContractPayCondition;
import com.shrct.businessprocess.common.CurrencyType;
import com.shrct.businessprocess.diagnose.ICanDiagnose;
import com.shrct.businessprocess.diagnose.IDiagnoseAcceptor;
import com.shrct.businessprocess.organization.RCEmployee;
import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.project.RCActualCostReport;
import com.shrct.businessprocess.project.RCCustomerContract;
import com.shrct.businessprocess.project.RCEarlyBuildInfo;
import com.shrct.businessprocess.project.RCExchangeRate;
import com.shrct.businessprocess.project.RCInitializeProjectProcess;
import com.shrct.businessprocess.project.RCPaymentProgressItem;
import com.shrct.businessprocess.project.RCProjectEvent;
import com.shrct.businessprocess.project.RCProjectInternalStatus;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.project.RCProjectSaleAssignment;
import com.shrct.businessprocess.project.RCProjectStat;
import com.shrct.businessprocess.project.RCProjectStatus;
import com.shrct.businessprocess.project.RCProjectTypeExtension;
import com.shrct.businessprocess.project.RCRealMoney;
import com.shrct.businessprocess.project.impl.RCProjectImpl;
import com.shrct.businessprocess.project.proxy.RCProjectProxy;
import com.shrct.businessprocess.purchase.RCPurchaseIncomeRequest;
import edu.fudan.langlab.domain.common.FileStorage;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IHasSimplePy;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCProjectImpl.class)
public interface RCProject extends IModelObject, IHasSimplePy, ICanDiagnose {
  public abstract String getCode();
  
  public abstract RCProject setCode(final String code);
  
  public abstract String getName();
  
  public abstract RCProject setName(final String name);
  
  public abstract String getSimplePy();
  
  public abstract RCProject setSimplePy(final String simplePy);
  
  public abstract String getNameField();
  
  public abstract CurrencyType getCurrencyType();
  
  public abstract RCProject setCurrencyType(final CurrencyType currencyType);
  
  public abstract RCEnterprise getCustomer();
  
  public abstract RCProject setCustomer(final RCEnterprise customer);
  
  public abstract RCProjectStatus getStatus();
  
  public abstract RCProject setStatus(final RCProjectStatus status);
  
  public abstract Boolean getAllTaskDelivered();
  
  public abstract RCProject setAllTaskDelivered(final Boolean allTaskDelivered);
  
  public abstract Date getDeliverDate();
  
  public abstract RCProject setDeliverDate(final Date deliverDate);
  
  public abstract RCProjectTypeExtension getTypeExtension();
  
  public abstract RCProject setTypeExtension(final RCProjectTypeExtension typeExtension);
  
  public abstract Boolean getIsConnected();
  
  public abstract RCProject setIsConnected(final Boolean isConnected);
  
  public abstract void delivered(final Date deliverDate);
  
  public abstract void deliverConfirmed(final Date confirmDate);
  
  public abstract RCEmployee getBusinessMan();
  
  public abstract Integer getYear();
  
  public abstract Boolean getActualCostDirtyFlag();
  
  public abstract RCProject setActualCostDirtyFlag(final Boolean actualCostDirtyFlag);
  
  public abstract Boolean getAllContractCollected();
  
  public abstract RCProject setAllContractCollected(final Boolean allContractCollected);
  
  public abstract Boolean getLor();
  
  public abstract RCProject setLor(final Boolean lor);
  
  public abstract Collection<RCProjectSaleAssignment> getSalers();
  
  public abstract RCProjectSaleAssignment createAndAddtoSalers();
  
  public abstract RCProjectSaleAssignment createAndAddtoSalers(final Procedure1<RCProjectSaleAssignment> updater);
  
  public abstract RCProject removeFromSalers(final RCProjectSaleAssignment rCProjectSaleAssignment);
  
  public abstract RCProject removeAllSalers();
  
  public abstract RCCostBreakDown getCbd();
  
  public abstract RCProject setCbd(final RCCostBreakDown cbd);
  
  public abstract Collection<RCExchangeRate> getExchangeRates();
  
  public abstract RCExchangeRate createAndAddtoExchangeRates();
  
  public abstract RCExchangeRate createAndAddtoExchangeRates(final Procedure1<RCExchangeRate> updater);
  
  public abstract RCProject removeFromExchangeRates(final RCExchangeRate rCExchangeRate);
  
  public abstract RCProject removeAllExchangeRates();
  
  public abstract Collection<RCProjectEvent> getEvents();
  
  public abstract RCProjectEvent createAndAddtoEvents();
  
  public abstract RCProjectEvent createAndAddtoEvents(final Procedure1<RCProjectEvent> updater);
  
  public abstract RCProject removeFromEvents(final RCProjectEvent rCProjectEvent);
  
  public abstract RCProject removeAllEvents();
  
  public abstract Collection<RCCustomerContract> getContracts();
  
  public abstract RCCustomerContract createAndAddtoContracts();
  
  public abstract RCCustomerContract createAndAddtoContracts(final Procedure1<RCCustomerContract> updater);
  
  public abstract RCProject removeFromContracts(final RCCustomerContract rCCustomerContract);
  
  public abstract RCProject removeAllContracts();
  
  public abstract Collection<RCSaleContractPayCondition> getPayConditions();
  
  public abstract RCSaleContractPayCondition createAndAddtoPayConditions();
  
  public abstract RCSaleContractPayCondition createAndAddtoPayConditions(final Procedure1<RCSaleContractPayCondition> updater);
  
  public abstract RCProject removeFromPayConditions(final RCSaleContractPayCondition rCSaleContractPayCondition);
  
  public abstract RCProject removeAllPayConditions();
  
  public abstract RCEarlyBuildInfo getEarlyBuildInfo();
  
  public abstract RCProject setEarlyBuildInfo(final RCEarlyBuildInfo earlyBuildInfo);
  
  public abstract Boolean getPassed();
  
  public abstract RCProject setPassed(final Boolean passed);
  
  public abstract Date getPassDate();
  
  public abstract RCProject setPassDate(final Date passDate);
  
  public abstract Collection<FileStorage> getAttachedFiles();
  
  public abstract RCProject addtoAttachedFiles(final FileStorage fileStorage);
  
  public abstract RCProject setAttachedFiles(final Iterable<FileStorage> attachedFiles);
  
  public abstract RCProject removeFromAttachedFiles(final FileStorage fileStorage);
  
  public abstract RCProject removeAllAttachedFiles();
  
  public abstract void updateLORInfo();
  
  public abstract void markAllContractCollected();
  
  public abstract Collection<RCExchangeRate> geters();
  
  public abstract RCEmployee getMajorSales();
  
  public abstract String getEntityName();
  
  public abstract RCInitializeProjectProcess getInitializeProcess();
  
  public abstract RCProjectMoney getTotalCustomerContractAmount();
  
  public abstract RCProjectMoney getTotalContractAmount();
  
  public abstract RCProjectMoney getTotalContractAmount(final RCEnterprise customer);
  
  public abstract RCProjectMoney getTotalContractAmount(final RCCustomerContract customerContract);
  
  public abstract RCProjectMoney getTotalBudgetContractAmount();
  
  /**
   * 总成本
   */
  public abstract RCProjectMoney getTotalBudgetNetAmount();
  
  public abstract RCRealMoney getTotalPaidAmount();
  
  /**
   * 指定合同的实际到款总额
   */
  public abstract RCRealMoney getTotalIncomeAmount(final RCCustomerContract customerContract);
  
  public abstract RCRealMoney getTotalIncomeAmount();
  
  public abstract RCProjectMoney getTotalInvoiceAmount(final RCCustomerContract customerContract);
  
  /**
   * 开票金额
   */
  public abstract RCProjectMoney getTotalInvoiceAmount();
  
  /**
   * 收款金额
   */
  public abstract Double getTotalAcceptedAmount();
  
  /**
   * 累计销项税
   */
  public abstract Double getTotalInvoiceTaxAmount();
  
  /**
   * 销项税总额=实际开票金额*实际开票税率/（1+实际开票税率）+（合同总额-实际开票金额）*CBD填写税率/（1+CBD填写税率）
   */
  public abstract Double getTotalIncomeTaxAmount();
  
  public abstract RCProjectMoney getTotalRealEfc();
  
  public abstract RCProjectMoney getTotalEfc();
  
  public abstract Double getContractProductAmount();
  
  public abstract Double getContractServiceAmount();
  
  public abstract RCProjectMoney getEfc(final Double dayAmount, final Double remainPercent, final Integer rawTotalDays);
  
  public abstract RCProjectMoney getTotalEfc(final Collection<RCPaymentProgressItem> payConditions);
  
  public abstract Collection<RCPurchaseIncomeRequest> getAllPurchaseIncomeRequests(final RCCustomerContract contract);
  
  public abstract RCExchangeRate getDefaultExchangeRate();
  
  public abstract RCCustomerContract createContract(final Procedure1<? super RCCustomerContract> preInit);
  
  public abstract void updateContract(final RCCustomerContract customerContract, final Procedure1<? super RCCustomerContract> updater);
  
  public abstract void deleteContract(final RCCustomerContract contract);
  
  public abstract RCProjectMoney getZeroAmount();
  
  public abstract RCProject update(final Function1<? super RCProject,? extends RCProject> preInit);
  
  public abstract Boolean isCurrentUserSaler();
  
  public abstract Boolean isCurrentUserBusinessMan();
  
  public abstract void contractSigned(final Date contractDate);
  
  public abstract void diagnose(final IDiagnoseAcceptor acceptor);
  
  public abstract Collection<RCActualCostReport> getReports();
  
  public abstract RCActualCostReport createAndAddtoReports();
  
  public abstract RCActualCostReport createAndAddtoReports(final Procedure1<RCActualCostReport> updater);
  
  public abstract RCProject removeFromReports(final RCActualCostReport rCActualCostReport);
  
  public abstract RCProject removeAllReports();
  
  public abstract RCActualCostReport getlastFixedActualCostReport();
  
  public abstract Collection<RCActualCostReport> getAllFixedActualCostReport();
  
  public abstract void fixActuralCostReport();
  
  public abstract Collection<RCActualCostReport> getCurrentActuralCostReports();
  
  public abstract RCActualCostReport getTempActualCostReport();
  
  public abstract RCProjectStat getStat();
  
  public abstract RCProject setStat(final RCProjectStat stat);
  
  public abstract RCProjectInternalStatus getInternalStatus();
  
  public abstract void start();
  
  public abstract void actFixTimer();
  
  public abstract void actUpdateTimer();
  
  public abstract Boolean isCreated();
  
  public abstract RCProjectProxy toProxy();
}
